package com.mc.mapper;

import com.mc.model.SysRole;
import com.mc.model.SysUser;
import com.mc.model.SysUserRole;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/***
 * @ClassName UserMapper
 * @Description todo
 * @Author CC
 * @Date: 2019/8/711:29
 * @Version 1.0
 */
public interface UserMapper {

    SysUser selectById(Long id);

    List<SysUser> selectAll();

    /**
     * 通过用户ID查询角色
     *
     * @param userId
     * @return
     */
    List<SysRole> selectRolesByUserId(Long userId);

    int insert(SysUser user);

    int insert1(SysUser user);


    int deleteById(SysUser user);

    /**
     * 通过userid 和 enabled状态查询 角色表
     * <p>
     * ### Error querying database.  Cause: org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [0, 1, param1, param2]
     * ### Cause: org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [0, 1, param1, param2]
     * 如果参数是多个的情况下，必须带@Param ("userId") @Param ("enabled")注解
     * 给参数配置@Param注解后，mybatis自动会把参数封装成map类型,@Param作为map中的key
     * 当只有1个参数（基本类型或拥有TypeHandler 配置的类型）的时候，为什么可以不使用注解？
     * 这是因为在这种情况下（除集合和数组外） MyBatis
     * 不关心这个参数叫什么名字就会直接把这个唯一的参数值拿来使用。
     *
     * @param userId
     * @param enabled
     * @return
     */
    List<SysRole> selectRolesByUserIdAndEnabled(@Param("userId") Long userId, @Param("enabled") Integer enabled);

    List<SysRole> selectRolesByUserIdAndEnabled(@Param("user") SysUser user, @Param("role") SysRole role);

    List<SysUser> selectByUser(SysUser user);

    int updateByIdSelective(SysUser user);

    SysUser selectByIdOrUserName(SysUser user);

    List<SysUser> selectByUserWithWhereTag(SysUser user);

    int updateUserWithSetTag(SysUser user);

//    List<SysUser> selectByIdList(@Param("mccc")List<Long> idList);
//    可以设置成@Param这样指定 collection中的名字
    List<SysUser> selectByIdList(List<Long> idList);

    int insertList(List<SysUser> userList);




}
